import Vue from 'vue';
import App from './App';
import router from './router';

import qs from 'qs';
Vue.prototype.$qs = qs;
// qs.parse()、qs.stringify()使用方法

import store from './Store';

import { axios, api } from './Axios';
Vue.prototype.$axios = axios;
Vue.prototype.$api = api;
import VueAxios from 'vue-axios';
Vue.use(VueAxios, axios);

import Moment from 'moment';
import 'moment/locale/zh-cn';
Vue.prototype.$moment = Moment;

import _ from 'lodash';
Vue.prototype._ = _;

import MD5 from 'md5';
Vue.prototype.MD5 = MD5;

// 通过script引入 dist/server_config.js 作为配置文件
// 开发时 window.server_config 只能返回 undefined
// 打包上线后 window.server_config 就可以返回配置对象
// 然后通过下面 mergeConfig 方法将两者合并返回可用的配置对象并存入原型链就可以全局使用了
import { mergeConfig } from './mergeConfig.js';
let serverConfig = null;
if (_.has(window, 'server_config')) {
  serverConfig = window.server_config.getServerConfig();
}
Vue.prototype.$config = mergeConfig(serverConfig);
console.log(
  '%c [ serverConfig ]-37',
  'font-size:13px; background:pink; color:#bf2c9f;',
  serverConfig,
);

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import './theme/index.css';

import './assets/font_4006452_x6c4bzn7op/iconfont.css';
import '@/assets/reset.css';
import 'font-awesome/css/font-awesome.min.css';

//这里通过修改dialog的props里的默认值,弹出框设置点击蒙版不关闭
// ElementUI.Dialog.props.closeOnClickModal.default = false;
//有些props 属性设置default不生效,需要这样:
// ElementUI.Table.props.stripe = {
// type: Boolean,
// default: true
// } //表格的斑马线条纹
//还有比如default是个方法
ElementUI.Table.props.headerRowClassName = {
  default: () => {
    return 'info-row';
  },
};

ElementUI.Button.props.size = {
  default: () => {
    return 'small';
  },
};
Vue.use(ElementUI);

Vue.filter('value2label', function(val, opts) {
  let obj = opts.find(v => {
    return v.value == val;
  });
  if (obj) return obj.label;
  return val;
});
Vue.filter('tel8star', function(tel, noReplace) {
  if (noReplace) return tel;
  return tel
    .split('')
    .reduce((t, v, i, a) => {
      let min = Math.min(3, (a.length - 3) / 2);
      let max = Math.min(4, (a.length - 4) / 2);
      if (i >= min && i <= a.length - 1 - max) {
        t.push('*');
      } else {
        t.push(v);
      }
      return t;
    }, [])
    .join('');
}); //通常用于给电话号码打星号，不过有时可能因为某些原因（noReplace）又不打码了

Vue.filter('EmptyTableCell', function(val, str) {
  if (str == undefined) {
    str = '--';
  }
  return val == '' ? str : val;
});

import Mockjs from 'mockjs';
Vue.prototype.$mock = Mockjs;

Vue.config.productionTip = false;

export const bus = new Vue();

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>',
});
